// function Print<T>(arg: T): T {
//     return arg;
// }
//
// const result1 = Print("This is a string");
// const result2 = Print(8888);
// console.log(result1);
// console.log(result2);
//This is a string
//8888

// function printArray<T>(arr: T[]): void {
//     for (let val of arr) {
//         console.log(val);
//     }
// }
//
// printArray<number>([1, 6, 8]);
// printArray<string>(["Go", "Vue", "Gin"]);
// 1
// 6
// 8
// Go
// Vue
// Gin


class GeneralClass<T> {
    private attr: T;

    constructor(value: T) {
        this.attr = value;
    }

    func(): T {
        return this.attr;
    }
}

let gc1 = new GeneralClass<number>(88);
let gc2 = new GeneralClass<string>("Pending");
console.log(gc1.func());
console.log(gc2.func());
//88
//Pending